//import org.jline.reader.History;
//import org.jline.reader.LineReader;
//import org.jline.reader.LineReaderBuilder;
//import org.jline.reader.impl.DefaultParser;
//import org.jline.reader.impl.history.DefaultHistory;
//import org.jline.terminal.Terminal;
//import org.jline.terminal.TerminalBuilder;
import org.junit.jupiter.api.Test;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.io.File;

/**
 * @author ex_chenzy59
 * @since 2025/2/26
 */
public class 控制台替換文本 {

    /**
     * \r回车字符，将光标移到当前行的开始位置。
     * 只能用System.out.print，不能换行覆盖
     */
    public static void solution1(){
        System.out.print("你的年齡:21");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.print("\r时间转瞬而逝,你的年齡:22");
    }
    /**
     * \b 退格字符, 光标向左移动一个位置，覆盖前一个字符
     * 只能用System.out.print。不能换行覆盖
     */
    public static void solution2(){
        System.out.print("你的年齡:21");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("\b\b\b\b\b\b\b时间转瞬而逝,你的年齡:22");

    }

    /**
     * java.awt.Robot 类可以模拟键盘和鼠标操作，可以用来实现更复杂的文本替换效果
     * 此方法不行，只能在光標所在位置
     */
    @Deprecated
    public static void solution3(){
        System.out.print("你的年齡:21");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        try {
            /**/
            Robot robot = new Robot();robot.keyPress(KeyEvent.VK_BACK_SPACE); // 删除1
            robot.keyRelease(KeyEvent.VK_BACK_SPACE);
            robot.keyPress(KeyEvent.VK_2); // 输出2
            robot.keyRelease(KeyEvent.VK_2);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 未实现，但是JLine适合开发控制台应用
     */
    public static void solution4(){
        try {
            // 创建终端
//            Terminal terminal = TerminalBuilder.builder()
//                    .system(true)
//                    .build();
//            // 创建 Reader
//            LineReader reader = LineReaderBuilder.builder()
//                    .appName("JLineExample")
//                    .terminal(terminal)
//                    .parser(new DefaultParser())
////                    .history(new DefaultHistory(new File("history.txt")))
//                    .build();
//
//            // 读取用户输入
//            String line;
//            while ((line = reader.readLine("prompt> ")) != null) {
//                System.out.println("You entered: " + line);
//            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
//        solution1();
//        solution2();
//        solution3();
        solution4();
    }
}
